import { history } from 'umi';
import ep from '@/utils/eventproxy';
import Cookies from 'js-cookie';
import api from '@/network/api';

const {
  userApi: { getUserinfo, clearLogin },
} = api;

let initState = () => ({
  //权限
  authority: [],

  // 用户信息
  user: {
    userId: '',
    name: '',
    orgId: '',
    orgList: '',
    telNum: '',
    empNum: '',
    username: '',
  },

  //工作空间
  spaceId: '1',
});

export default {
  namespace: 'user',
  state: { ...initState() },
  effects: {
    // 获取用户信息
    *getUserinfo({ payload }, { call, put }) {
      var obj = { params: {}, body: payload };
      const rs = yield call(getUserinfo, obj);
      if (rs.success) {
        var data = rs.data;
  
        Cookies.set('userId', rs.data.id);
        let authority = ['login'];
        if(rs.data.authorities) authority.push(...rs.data.authorities)
        yield put({
          type: 'user/setState',
          payload: {
            user: {
              ...data,
              userId: data.id,
              name: data.username,
              username: data.username,
            },
            authority: authority,
          },
        });
      }
      return Promise.resolve(rs);
    },

    // 退出登录
    *clearLogin({ payload }, { call, put, select }) {
      const { userId } = yield select(state => state.user.user);
      if (userId) clearLogin({ params: {}, body: { userId: userId } });
      yield put({ type: 'initAll', payload: {} });
      Cookies.remove('userId');
      history.replace('/user/login');
    },

    // models 初始化
    *initAll({ payload }, { call, put }) {
      yield put({ type: 'init' });
      yield put({ type: 'masterGlobal/init' });
    },
  },

  reducers: {
    setState(state, action) {
      var value = { ...state, ...action.payload };
      ep.emit('masterStateChange', {
        name: 'user',
        type: 'setState',
        value: value,
      });
      return value;
    },
    init(state, action) {
      var value = { ...initState(), ...action.payload };
      ep.emit('masterStateChange', {
        name: 'user',
        type: 'init',
        value: value,
      });
      return value;
    },
  },
};


// 1,查询数据源,SEL_DATA_SOURCE,1
// 2,创建数据源,ADD_DATA_SOURCE,1
// 3,编辑数据源,UPDATE_DATA_SOURCE,1
// 4,删除数据源,DEL_DATA_SOURCE,1
// 5,查看元数据,SEL_METADATA,2
// 6,创建数据集成任务,ADD_INTEGRATION_TASK,3
// 7,查询数据集成任务,SEL_INTEGRATION_TASK,3
// 8,编辑数据集成任务,UPDATE_INTEGRATION_TASK,3
// 9,删除数据集成任务,DEL_INTEGRATION_TASK,3
// 10,发布数据集成任务,PUBLISH_INTEGRATION_TASK,3
// 11,创建数据质量任务,ADD_QUALITY_TASK,4
// 12,查询数据质量任务,SEL_QUALITY_TASK,4
// 13,编辑数据质量任务,UPDATE_QUALITY_TASK,4
// 14,删除数据质量任务,DEL_QUALITY_TASK,4
// 15,发布数据质量任务,PUBLISH_QUALITY_TASK,4
// 16,运行数据质量任务,RUN_QUALITY_TASK,4
// 17,查询实例,SEL_DEVOPS_EXAMPLE,5
// 18,运行实例,RUN_DEVOPS_EXAMPLE,5
// 19,操作实例,OPERATE_DEVOPS_EXAMPLE,5
// 20,下线节点,OFFLINE_DEVOPS_EXAMPLE,5
// 21,创建用户,ADD_USER,6
// 22,编辑用户,UPDATE_USER,6
// 23,删除用户,DEL_USER,6
// 24,查询用户,SEL_USER,6
// 25,创建角色,ADD_ROLE,7
// 26,编辑角色,UPDATE_ROLE,7
// 27,删除角色,DEL_ROLE,7
// 28,查询角色,SEL_ROLE,7
// 29,审批权限,APPROVAL_AUTHORITY,8
// 30,数据源申请权限,APPLY_DATA_SOURCE,8
// 31,查询API,SEL_API,9
// 32,编辑API,UPDATE_API,9
// 33,删除API,DEL_API,9
// 34,创建API,ADD_API,9
// 35,运行API,RUN_API,9
// 36,发布API,PUBLISH_API,9
// 37,下线API,OFFLINE_API,9
// 38,申请API,APPLY_API,9
// 39,创建数据开发任务,ADD_DEV_TASK,10
// 40,编辑数据开发任务,UPDATE_DEV_TASK,10
// 41,查询数据开发任务,SEL_DEV_TASK,10
// 42,删除数据开发任务,DEL_DEV_TASK,10
// 43,提交数据开发任务,SUBMIT_DEV_TASK,10
// 44,运行数据开发任务,RUN_DEV_TASK,10
// 45,查询我的权限,SEL_MY_AUTH,8
// 46,查询空间成员列表,SEL_SPACE_MEMBER,11
